package pe.com.certicom.moviles.service;

import java.io.InputStream;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import pe.com.certicom.moviles.model.beans.ActaEntrega;
import pe.com.certicom.moviles.model.beans.Articulo;
import pe.com.certicom.moviles.model.beans.Asignacion;
import pe.com.certicom.moviles.model.beans.AsignacionArticuloKey;
import pe.com.certicom.moviles.model.beans.Carga;
import pe.com.certicom.moviles.model.beans.DetalleActaEntregaKey;
import pe.com.certicom.moviles.model.beans.DetalleCarga;
import pe.com.certicom.moviles.model.beans.Devolucion;
import pe.com.certicom.moviles.model.beans.DevolucionArticuloKey;
import pe.com.certicom.moviles.model.beans.Recepcion;
import pe.com.certicom.moviles.model.beans.Reparacion;
import pe.com.certicom.moviles.model.beans.Reposicion;
import pe.com.certicom.moviles.model.beans.Suspension;
import pe.com.certicom.moviles.model.beans.Usuario;

public interface RecepcionService {

	public static final String SECUENCIA_RECEPCION = "secuencia_recepcion";
	public static final String SECUENCIA_MOVIMIENTO = "secuencia_movimiento";
	public static final String SECUENCIA_ACTA_ENTREGA = "secuencia_acta_entrega";
	public static final String SECUENCIA_ARTICULO = "secuencia_articulo";
	public static final String SECUENCIA_ASIGNACION = "secuencia_asignacion";
	public static final String SECUENCIA_REPOSICION = "secuencia_reposicion";
	public static final String SECUENCIA_DEVOLUCION = "secuencia_devolucion";
	public static final String SECUENCIA_REPARACION = "secuencia_reparacion";
	public static final String SECUENCIA_SUSPENSION = "secuencia_suspension";
	public static final String SECUENCIA_USUARIO = "secuencia_usuario";
	public static final String SECUENCIA_CARGA = "secuencia_carga";
	
	//TODO Crear las siguientes secuencias en la base de datos
	public static final String SECUENCIA_CORRELATIVO_EQUIPOS_NUEVOS = "secuencia_correlativo_acta_equipos_nuevos";
	
	public static final String CODIGO_ESTADO_RECIBIDO = "REC";
	public static final String CODIGO_ESTADO_ASIGNADO = "ASI";
	public static final String CODIGO_ESTADO_DEVUELTO = "DEV"; 
	public static final String CODIGO_ESTADO_EN_REPARACION = "REP";
	public static final String CODIGO_ESTADO_SUSPENDIDO = "SUS";
	public static final String CODIGO_ESTADO_BAJA = "BAJ";
	public static final String CODIGO_ESTADO_PERDIDA = "PER";
	
	public static final String TIPO_ASIGNACION_EQUIPO = "E";
	public static final String TIPO_ASIGNACION_CHIP = "C";
	public static final String TIPO_ASIGNACION_EQUIPO_CHIP = "A";
	
	public static final String TIPO_ARTICULO_EQUIPO = "E";
	public static final String TIPO_ARTICULO_CHIP = "C";
	
	public static final Long TIPO_ACCESORIO_CARGADOR = 0L;
	public static final Long TIPO_ACCESORIO_BATERIA = 1L;
	public static final Long TIPO_ACCESORIO_AUDIFONOS = 2L;
	
	
	public void registrarModificacion(Articulo articuloEquipo,Articulo articuloChip);
	public void registrarModificacionAsignacion(Asignacion asignacion);
	public void relacionEquipoChip(Articulo articuloEquipo,Articulo articuloChip);
	
	public void registrarModificacionReposicion(Reposicion reposicion,Articulo articuloEquipo,Articulo articuloChip);
	
	public void registrarRecepcion(Recepcion recepcion, List<Articulo> articulos, Usuario usuario);
	
	//Si la carga presenta errores entonces solo carga
	public int registrarBitacora(Carga carga, List<DetalleCarga> detalleCarga);
	public int registrarRecepcion(Carga carga, List<DetalleCarga> detalleCarga, Usuario usuario);
	
	public int registrarConsumo(Carga carga, List<DetalleCarga> detalleCarga, Usuario usuario);
	
	
	public void registrarAsignacion(Asignacion asignacion, Articulo equipo, Articulo chip, ActaEntrega acta, Usuario usuario, Reposicion reposicion);
	public void registrarSuspension(Suspension suspension, Articulo articuloCelular,Articulo articuloImei, String indDarBaja, Usuario usuario);
	public void registrarDevolucion(Devolucion devolucion, Articulo articulo, ActaEntrega acta, Usuario usuario);
	public void registrarReparacion(Reparacion reparacion, Articulo articulo, Usuario usuario);	
	public void registrarPerdida(Reposicion reposicion, Articulo articuloChipPerdido, Articulo articuloImeiPerdido, Usuario usuario);
	public Asignacion registrarReposicion(Reposicion reposicion, Articulo articuloChipRecibido, Articulo articuloImeiRecibido, ActaEntrega acta,Articulo articuloChipPerdido, Articulo articuloImeiPerdido, Usuario usuario);
	
	public Asignacion getAsignacion(Long idAsignacion);
	public Devolucion getDevolucion(Long idDevolucion);
	public Reposicion getReposicion(Long idReposicion);
	public Articulo getArticulo(Long idArticulo);
	public ActaEntrega getActaEntrega(Long idActaEntrega);
	public Recepcion getRecepcion(Long idRecepcion);
	public List<AsignacionArticuloKey> getArticulosAsignados(Long idAsignacion);
	public List<DevolucionArticuloKey> getArticulosDevueltos(Long idDevolucion);
	public List<DetalleActaEntregaKey> getAccesorios(Long idActaEntrega);
	
	public ActaEntrega getActaEntregaImprimir(Long idAsignacion,Long idActaEntrega);
	public ActaEntrega getActaDevolucionImprimir(Long idDevolucion,Long idActaEntrega);
	
	public byte[] generarActaPDF(InputStream is, Collection fieldData, Map<String, Object> parametros);
	public void registrarActaPDF(Long idActa, byte[] pdfBytes);

	public void eliminarCarga(Long idCarga);
	public void eliminarBitacora(Carga carga);
	
}
